﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
using Resources;

namespace hercules.Models
{
    public class VendaModel
    {
        [Required(ErrorMessageResourceType = typeof(Mensagem),
            ErrorMessageResourceName = "erro_campo_requerido")]
        [DisplayName("Número da Nota")]
        public Int32 NumeroNota { get; set; }

        [Required(ErrorMessageResourceType = typeof(Mensagem),
            ErrorMessageResourceName = "erro_campo_requerido")]
        [DisplayName("Funcionário")]
        public Int32 Funcionario { get; set; }

        [Required(ErrorMessageResourceType = typeof(Mensagem),
            ErrorMessageResourceName = "erro_campo_requerido")]
        [DisplayName("Cliente")]
        public Int32 Cliente { get; set; }

        [DisplayName("Modelo")]
        [StringLength(2, MinimumLength = 2,ErrorMessageResourceType = typeof(Mensagem),
            ErrorMessageResourceName = "erro_length_unico")]
        public string Modelo { get; set; }

        [DisplayName("Data de Emissão")]
        [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
        [Required(ErrorMessageResourceType = typeof(Mensagem),
            ErrorMessageResourceName = "erro_campo_requerido")]
        public DateTime DataEmissao { get; set; }

        [DisplayName("Data de Saída")]
        [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
        [Required(ErrorMessageResourceType = typeof(Mensagem),
            ErrorMessageResourceName = "erro_campo_requerido")]
        public DateTime DataSaida { get; set; }

        [DisplayName("Natureza CFOP")]
        public Int32 NaturezaCFOP{ get; set; }

        [DisplayName("Valor Total")]
        public decimal ValorTotal { get; set; }

        [DisplayName("Desconto")]
        public decimal Desconto { get; set; }

        [DisplayName("Quantidade")]
        public Int32 Quantidade { get; set; }

        [DisplayName("Valor Unitário")]
        public decimal ValorUnitario { get; set; }

        [DisplayName("Valor Total do Produto")]
        public decimal ValorTotalProduto { get; set; }

        [DisplayName("Status da Venda")]
        [StringLength(10, MinimumLength = 5, ErrorMessageResourceType = typeof(Mensagem),
            ErrorMessageResourceName = "erro_length")]
        public string StatusVenda { get; set; }

        [DisplayName("Funcionário")]
        public Pessoa Pessoa1 { get; set; }

        [DisplayName("Cliente")]
        public Pessoa Pessoa { get; set; }

        public Venda VendaModelToVenda(VendaModel vendaModel)
        {
            Venda venda = new Venda();
            venda.numeroNota = vendaModel.NumeroNota;
            venda.funcionario = vendaModel.Funcionario;
            venda.cliente = vendaModel.Cliente;
            venda.modelo = vendaModel.Modelo;
            venda.dataEmissao = vendaModel.DataEmissao;
            venda.dataSaida = vendaModel.DataSaida;
            venda.naturezaCFOP = vendaModel.NaturezaCFOP;
            venda.valorTotal = vendaModel.ValorTotal;
            venda.desconto = vendaModel.Desconto;
            venda.quantidade = vendaModel.Quantidade;
            venda.valorUnitario = vendaModel.ValorUnitario;
            venda.valorTotalProduto = vendaModel.ValorTotalProduto;
            venda.statusVenda = vendaModel.StatusVenda;

            venda.Pessoa1 = vendaModel.Pessoa1;
            venda.Pessoa = vendaModel.Pessoa;

            return venda;
        }

        public VendaModel VendaToVendaModel(Venda venda)
        {
            VendaModel vendaModel = new VendaModel();
            vendaModel.NumeroNota = venda.numeroNota;
            vendaModel.Funcionario = venda.funcionario;
            vendaModel.Cliente = venda.cliente;
            vendaModel.Modelo = venda.modelo;
            vendaModel.StatusVenda = venda.statusVenda;

            vendaModel.Pessoa1 = venda.Pessoa1;
            vendaModel.Pessoa = venda.Pessoa;

            if (venda.dataEmissao != null) vendaModel.DataEmissao = (DateTime)venda.dataEmissao;
            if (venda.dataSaida != null) vendaModel.DataSaida = (DateTime)venda.dataSaida;
            if (venda.naturezaCFOP != null) vendaModel.NaturezaCFOP = (int)venda.naturezaCFOP;
            if (venda.valorTotal != null) vendaModel.ValorTotal = (decimal)venda.valorTotal;
            if (venda.desconto != null) vendaModel.Desconto = (decimal)venda.desconto;
            if (venda.quantidade != null) vendaModel.Quantidade = (int)venda.quantidade;
            if (venda.valorUnitario != null) vendaModel.ValorUnitario = (decimal)venda.valorUnitario;
            if (venda.valorTotalProduto != null) vendaModel.ValorTotalProduto = (decimal)venda.valorTotalProduto;

            return vendaModel;
        }

        public List<VendaModel> ListVendaToListVendaModel(List<Venda> listVenda)
        {
            return listVenda.Select(VendaToVendaModel).ToList();
        }
    }
}